心理ネットワークを用いた
シミュレーション研究

計算論的臨床心理学サマースクール2025

専修大学大学院文学研究科心理学専攻修士課程2年
大水 拓海

2025-08-07

自己紹介

大水拓海(おおみず たくみ)

所属

専修大学大学院文学研究科心理学専攻修士課程2年

研究テーマ・関心

心理療法の作用機序,感情粒度,心理ネットワーク,
シミュレーション,能動的推論

個人HP

心理ネットワーク”シミュレーション”

なぜネットワークからシミュレーションを行うか?

  • 実際の臨床データを使用することの困難さ(入手や使用)

  • 侵襲性の問題を超えて介入を試す,予測する

  • 新たな仮説の生成

ネットワークシミュレーションの実例

Cramer et al(2016)

DSM-III-TRに基づく大うつ病の横断データ(8973名)から症状ネットワークが推定されている

Cramer et al (2016)

ネットワークの結合を強めるパラメータ\(c\)の値が症状全体の活性化を左右する(Cramer et al, 2016)

\[A^{t}_{i} = \sum^{J}_{j=1} cW_{ij}X^{t-1}_j\tag{1}\]

\[P(X^{t}_{i} = 1) = \frac{1}{1+e^{b_{i}}-A^{t}_i} \tag{2}\]

Omizu & Kunisato(2025)

Omizu & Kunisato(2025)

  • Cramerのモデルでは症状のみの接続の強さに着目

  • 実データにおいて症状が改善しても接続が強まっていることが報告(Höller et al, 2022)



→心理療法などの治療的な要素を入れて拡張することで,ネットワークの中でどの症状を標的にすれば大きな治療効果が得られるかシミュレーションできる

Omizu & Kunisato(2025):単独症状

Omizu & Kunisato(2025):複数症状

psynetsim パッケージ

シミュレーションを実際に行ってみる

psynetsim パッケージ

  • ネットワークシミュレーションを実行する関数を
    パッケージにしてまとめました

  • ご自身のRコンソールに以下をコピペして,パッケージをインストールしてください

remotes::install_github("TakumiOmizu/psynetsim")
library(psynetsim)

psynetsim パッケージ

  • W_init:第1引数。症状ネットワークの重み。

  • b_init:第2引数。各ノードの活性化閾値。

  • target:第3引数。どのノードを標的とするかを選択する。介入するノードは1,介入しないノードは0にする。

上記は必須の引数です。
他にもいろいろオプションがあります。

?simulate_treatment_network

psynetsim パッケージ

仮想データの作成

# Example data for a 6-symptom network
set.seed(456)
weight_6 <- matrix(rnorm(6*6, mean = 0.2, sd = 0.08), nrow = 6, ncol = 6)
diag(weight_6) <- 0
weight_6[upper.tri(weight_6)] <- t(weight_6)[upper.tri(weight_6)]
print(weight_6)
           [,1]      [,2]      [,3]       [,4]       [,5]      [,6]
[1,] 0.00000000 0.2497420 0.2640700 0.08888861 0.14285145 0.1740751
[2,] 0.24974204 0.0000000 0.2805882 0.24585877 0.12673516 0.3048878
[3,] 0.26406997 0.2805882 0.0000000 0.35578851 0.33895489 0.2309987
[4,] 0.08888861 0.2458588 0.3557885 0.00000000 0.08585358 0.2166589
[5,] 0.14285145 0.1267352 0.3389549 0.08585358 0.00000000 0.1128498
[6,] 0.17407512 0.3048878 0.2309987 0.21665887 0.11284977 0.0000000
threshold_6 <- data.frame(threshold = rnorm(6, mean = 0.3, sd = 0.05))
print(threshold_6)
  threshold
1 0.2669698
2 0.2929874
3 0.2788010
4 0.2980632
5 0.2985529
6 0.3196519

psynetsim パッケージ

ターゲットとノード名の設定

target_list_6 <- list(symptom1 = 1, symptom2 = 0, symptom3 = 0,
                      symptom4 = 0, symptom5 = 0, symptom6 = 0)
custom_symptom_names_6 <- c("Anxiety", "Sadness", "Fatigue",
                            "Insomnia", "Irritability", "Pain")

シミュレーションの実行

# Run the simulation with custom parameters
sim_results <- simulate_treatment_network(
  W_init = weight_6, #重み
  b_init = threshold_6$threshold, #閾値
  target = target_list_6, #ターゲット
  connectivity = 1.2, #全体的な接続の強さ
  edge_between_TC = 1, #TCノード間の接続の強さ
  weight_bias = 1, #症状とTCノードの重みの強さ
  TB = 1, #閾値の値の高さ
  trial = 10, # 繰り返し回数(複数回行って平均を取っている)
  baseline_iteration = 10, # ベースラインのステップ数
  num_TC = 5, # TCノードの数
  TC_iteration_per_component = 10, # 何ステップごとにTCを追加するか
  follow_up_iteration = 10, # TCを全て追加した後のフォローアップ期間
  symptom_name = custom_symptom_names_6
)

psynetsim パッケージ

シミュレーション結果

ネットワークシミュレーションを試そう!

Jordan et al(2017)のオープンデータからPHQ-9を使用します

# Isingのデータを使ってシミュレーションする
library(tidyverse)
library(foreign)
library(bootnet)
library(qgraph)
library(IsingFit)

# データの読み込み
data <- read.spss("data/pone.0182162.s004.sav", 
                  to.data.frame=TRUE)

# データの整理(PHQ-9に絞って実行)
data_phq <- data %>% 
  mutate(phq9a = S_PHQ9_a, phq9b = S_PHQ9_b, 
         phq9c = S_PHQ9_c, phq9d = S_PHQ9_d, 
         phq9e = S_PHQ9_e, phq9f = S_PHQ9_f, 
         phq9g = S_PHQ9_g, phq9h = S_PHQ9_h, 
         phq9i = S_PHQ9_i) %>% 
  select(phq9a, phq9b, phq9c, phq9d, phq9e, phq9f, phq9g, phq9h, phq9i) %>%
  binarize(split = 1)

Isingモデルによる推定

res <- IsingFit(data_phq, family = "binomial", AND = TRUE, gamma = 0.25, plot
         = TRUE, progressbar = TRUE, min_sum = -Inf,
         lowerbound.lambda = NA)

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |========                                                              |  11%
  |                                                                            
  |================                                                      |  22%
  |                                                                            
  |=======================                                               |  33%
  |                                                                            
  |===============================                                       |  44%
  |                                                                            
  |=======================================                               |  56%
  |                                                                            
  |===============================================                       |  67%
  |                                                                            
  |======================================================                |  78%
  |                                                                            
  |==============================================================        |  89%
  |                                                                            
  |======================================================================| 100%

データの確認

重み

          phq9a     phq9b     phq9c     phq9d     phq9e     phq9f     phq9g
phq9a 0.0000000 1.3512233 0.3825356 0.8660206 0.6654505 0.4623484 0.4960907
phq9b 1.3512233 0.0000000 0.3867215 1.2137379 0.3584718 1.1976485 0.4538108
phq9c 0.3825356 0.3867215 0.0000000 1.1378644 0.3317111 0.0000000 0.4446904
phq9d 0.8660206 1.2137379 1.1378644 0.0000000 0.8244176 0.3485497 0.7074686
phq9e 0.6654505 0.3584718 0.3317111 0.8244176 0.0000000 0.6119471 0.4687336
phq9f 0.4623484 1.1976485 0.0000000 0.3485497 0.6119471 0.0000000 0.8234036
phq9g 0.4960907 0.4538108 0.4446904 0.7074686 0.4687336 0.8234036 0.0000000
phq9h 0.2331879 0.4098064 0.2051685 0.1764577 0.7436476 0.4007217 1.2111021
phq9i 0.5651184 1.4611687 0.4457955 0.0000000 0.3171910 1.2929490 0.2601279
          phq9h     phq9i
phq9a 0.2331879 0.5651184
phq9b 0.4098064 1.4611687
phq9c 0.2051685 0.4457955
phq9d 0.1764577 0.0000000
phq9e 0.7436476 0.3171910
phq9f 0.4007217 1.2929490
phq9g 1.2111021 0.2601279
phq9h 0.0000000 0.4314356
phq9i 0.4314356 0.0000000

閾値

     phq9a      phq9b      phq9c      phq9d      phq9e      phq9f      phq9g 
-2.0108238 -3.3807170 -0.8327044 -1.1721562 -2.2124596 -2.9561829 -2.4153062 
     phq9h      phq9i 
-3.4089789 -4.6697303 

ネットワークの確認

library(psynetsim)
qgraph(res$weiadj, posCol = "blue", color = "lightblue")

シミュレーションの実行

一つ目の症状ノードを標的にした介入

#推定したデータを使ってシミュレーション
simulate_treatment_network(res$weiadj, 
                           res$thresholds,
                           connectivity = 1.3,
                           target = c(1,0,0,0,0,0,0,0,0),
                           num_TC = 10,
                           edge_between_TC = 2,
                           weight_bias = 1)

シミュレーション結果

$result_plot
TableGrob (1 x 2) "arrange": 2 grobs
  z     cells    name           grob
1 1 (1-1,1-1) arrange gtable[layout]
2 2 (1-1,2-2) arrange gtable[layout]

$result_text
[1] "The mean value of symptom at the final step(t=120). = 0.578\nThe mean value of treatment component at the final step(t=120). = 0.600\nThe SD value of symptom at the final step(t=120). = 0.395\nThe SD value of treatment component at the final step(t=120). = 0.429"

ネットワークシミュレーションを試そう!

PHQ-9の症状ネットワークや,関心のあるテーマから推定したネットワークを対象にして,ネットワークシミュレーションを行ってみましょう!

  • 単独もしくは複数の症状を標的とした場合,どの症状への介入が最も効果的か?

  • 症状を悪化させてしまう組み合わせはあるか?

  • その他,どんな条件だとどんなことが起きそうか?